home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 60750 / 60750.xpi / chrome / chromeFiles / content / btOverlay.xul < prev    next >
Extensible Markup Language  |  2010-01-20  |  15KB  |  395 lines

  1. <?xml version="1.0"?>
  2. <!DOCTYPE btClient SYSTEM "../locale/btClient.dtd">
  3. <overlay
  4.     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  5.   <script type="application/x-javascript;version=1.7" src="btClient.js" />
  6.   <script type="application/x-javascript;version=1.7" src="btUtilities.js" />
  7.   <script type="application/x-javascript;version=1.7" src="sc_refinements.js" />
  8.   <script type="application/x-javascript;version=1.7">
  9.   (function (brandObject) {
  10.     BrandThunder.initialize(brandObject);
  11.     for (var client in BrandThunder.clients) {
  12.       var clientUtils = BrandThunder.clients[client].utilities;
  13.       if (clientUtils) {
  14.         if (clientUtils.initializeButtons) {
  15.           for (func in clientUtils) {
  16.             if (brandObject.utilities[func]) {
  17.               clientUtils[func] = brandObject.utilities[func];
  18.             }
  19.           }
  20.         }
  21.       }
  22.     }
  23.  
  24.     var prefObserver = {      
  25.       observe: function observe(subject, topic, data) {
  26.         switch (data) {
  27.           case "currentBoom":
  28.             brandObject.utilities.switchBoom(brandObject, true);
  29.             break;
  30.           case "bigBoom":
  31.             brandObject.utilities.toggleTheme(brandObject);
  32.             break;
  33.           case "keywordSearch":
  34.             var keywordSearch = true;
  35.             try {
  36.               keywordSearch = btPrefBranch.getBoolPref("keywordSearch");
  37.             } catch (ex) {}
  38.             if (keywordSearch == false) {
  39.               var prefbranch=Components.classes["@mozilla.org/preferences-service;1"]
  40.                                        .getService(Components.interfaces.nsIPrefBranch);
  41.                 var keywordURL = prefbranch.getCharPref("keyword.URL");
  42.               if (keywordURL.match("chrff-brandt_off") ||
  43.                   keywordURL.match("BRTH") ||
  44.                   keywordURL.match(brandObject.askOriginCode)) {
  45.                 prefbranch.clearUserPref("keyword.URL");
  46.               }
  47.             } else {
  48.               var currentBoom = btPrefBranch.getCharPref("currentBoom");
  49.         
  50.               if (!brandObject.booms[currentBoom]) {
  51.                 return;
  52.               }
  53.               brandObject.utilities.updateKeywordSearch(brandObject);
  54.             }
  55.             break;
  56.           case "selectedEngine":
  57.             var currentBoom = btPrefBranch.getCharPref("currentBoom");
  58.       
  59.             if (!brandObject.booms[currentBoom]) {
  60.               return;
  61.             }
  62.             if (brandObject.utilities.updateKeywordSearch) {
  63.               brandObject.utilities.updateKeywordSearch(brandObject);
  64.             }
  65.             break;
  66.         }
  67.       }
  68.     }
  69.  
  70.     var btObserver = {      
  71.       observe: function observe(subject, topic, data) {
  72.         switch (topic) {
  73.           case "lightweight-theme-changed":
  74.             if (brandObject.utilities.LightweightThemeManager) {
  75.               if (brandObject.utilities.LightweightThemeManager.currentTheme) {
  76.                 btPrefBranch.setBoolPref("bigBoom", false);
  77.               } else {
  78.                 btPrefBranch.setBoolPref("bigBoom", true);
  79.               }
  80.             }
  81.         }
  82.       }
  83.     }
  84.  
  85.     var btPrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
  86.                                  .getService(Components.interfaces.nsIPrefService)
  87.                                  .getBranch("extensions.brandthunder.");
  88.     btPrefBranch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  89.  
  90.     var searchPrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
  91.                                  .getService(Components.interfaces.nsIPrefService)
  92.                                  .getBranch("browser.search.");
  93.     searchPrefBranch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  94.  
  95.     var observerService = Components.classes["@mozilla.org/observer-service;1"]
  96.                                    .getService(Components.interfaces.nsIObserverService);
  97.  
  98.     var searchSvc = Components.classes["@mozilla.org/browser/search-service;1"]
  99.                               .getService(Components.interfaces.nsIBrowserSearchService);
  100.  
  101.     var askTabSearchHTML;
  102.  
  103.     var xhr2 = new XMLHttpRequest();
  104.     xhr2.open('GET', "http://brandthunder.com/ask/tab_search.html", true);
  105.     xhr2.onload = function() {
  106.       askTabSearchHTML = xhr2.responseText;
  107.     }
  108.     xhr2.send(null);
  109.  
  110.     var xhr3 = new XMLHttpRequest();
  111.     xhr3.open('GET', "http://brandthunder.com/bing/tab_search.html", true);
  112.     xhr3.onload = function() {
  113.       bingTabSearchHTML = xhr3.responseText;
  114.     }
  115.     xhr3.send(null);
  116.  
  117.  
  118.     function tabOpen(event) {
  119.       var browser = gBrowser.getBrowserForTab(event.originalTarget);
  120.       if (browser.contentDocument.location.href != "about:blank") {
  121.         return;
  122.       }
  123.       function blankTabSearchTimeout(inner_event) {
  124.         var doc = inner_event.target;
  125.         browser.removeEventListener("DOMContentLoaded", blankTabSearchTimeout, false);
  126.         window.setTimeout(blankTabSearch, 250, doc);
  127.       }
  128.       browser.addEventListener("DOMContentLoaded", blankTabSearchTimeout, false);
  129.     }
  130.  
  131.     function blankTabSearch(doc) {
  132.       try {
  133.         var tabSearch = btPrefBranch.getBoolPref("tabSearch");
  134.         if (!tabSearch) {
  135.           return;
  136.         }
  137.       } catch (ex) {
  138.       }
  139.       var currentBoom = btPrefBranch.getCharPref("currentBoom");
  140.  
  141.       /* Only handle tab requests for our boom */
  142.       if (!brandObject.booms[currentBoom]) {
  143.         return;
  144.       }
  145.   
  146.       /* Find the client that corresponds to the current boom */
  147.       var boomClient;
  148.       for (let i in BrandThunder.clients) {
  149.         for (let j in BrandThunder.clients[i].booms) {
  150.           if (j == currentBoom) {
  151.             boomClient = i;
  152.             break;
  153.           }
  154.         }
  155.       }
  156.  
  157.       if (!doc) {
  158.         return;
  159.       }
  160.  
  161.       var body = doc.getElementsByTagName("body")[0];
  162.       if (!body || body.innerHTML != '') {
  163.         return;
  164.       }
  165.       html = doc.getElementsByTagName("html")[0];
  166.       var currentEngine = searchSvc.currentEngine.description;
  167.       if ((currentEngine != "Ask - BT") &&
  168.           (currentEngine != "Bing - BT")) {
  169.         currentEngine = brandObject.defaultSearchEngine;
  170.         
  171.       }
  172.       function askTabSearch() {
  173.         if (askTabSearchHTML) {
  174.           html.innerHTML = askTabSearchHTML;
  175.           var oElement = doc.getElementById("o");
  176.           /* Get the current boom */
  177.           var askCode;
  178.           if (boomClient) {
  179.             askCode = BrandThunder.clients[boomClient].askOriginCode;
  180.           } else {
  181.             askCode = brandObject.askOriginCode;
  182.           }
  183.           oElement.setAttribute("value", askCode);
  184.         }
  185.       }
  186.       function bingTabSearch() {
  187.         if (bingTabSearchHTML) {
  188.           html.innerHTML = bingTabSearchHTML;
  189.           var formElement = doc.getElementById("FORM");
  190.           /* Get the current boom */
  191.           var bingCode;
  192.           if (boomClient) {
  193.             bingCode = BrandThunder.clients[boomClient].bingFormCode;
  194.           } else {
  195.             bingCode = brandObject.bingFormCode;
  196.           }
  197.           formElement.setAttribute("value", bingCode);
  198.         }
  199.       }
  200.       switch (currentEngine) {
  201.         case "Ask - BT":
  202.           askTabSearch();
  203.           break;
  204.         case "Bing - BT":
  205.           bingTabSearch();
  206.           break;
  207.       }
  208.       
  209.       function setPreference(event) {
  210.         btPrefBranch.setBoolPref("tabSearch", !event.target.checked);
  211.       }
  212.       if (askTabSearchHTML || bingTabSearchHTML) {
  213.         var tabSearchPref = doc.getElementById("tabSearchPref");
  214.         if (tabSearchPref) {
  215.           tabSearchPref.style.display = "";
  216.           tabSearchPref.addEventListener("click", setPreference, false);
  217.         }
  218.       }
  219.     }
  220.  
  221.     function navBarEvent(event) {
  222.       if (event.button == 0) {
  223.         var currentBoom = btPrefBranch.getCharPref("currentBoom");
  224.         if (!brandObject.booms[currentBoom]) {
  225.           return;
  226.         }
  227.         
  228.         var targetIDLeft = "navigator-toolbox";
  229.         var targetIDRight = "navigator-toolbox";
  230.         var navBar = document.getElementById("nav-bar");
  231.         var mainWindow = document.getElementById("main-window");
  232.         var navigatorToolbox = document.getElementById("navigator-toolbox");
  233.         var navBarStyle = window.getComputedStyle(navBar,null);
  234.         var marginLeft = parseInt(navBarStyle.getPropertyValue("margin-left"));
  235.         var marginRight = parseInt(navBarStyle.getPropertyValue("margin-right"));
  236.         /* If there is no margin, use padding. This is for booms that use nav-bar padding for image */
  237.         if (marginLeft == 0) {
  238.           marginLeft = parseInt(navBarStyle.getPropertyValue("padding-left"));
  239.           targetIDLeft = "nav-bar";
  240.         }
  241.         if (marginRight == 0) {
  242.           marginRight = parseInt(navBarStyle.getPropertyValue("padding-right"));
  243.           targetIDRight = "nav-bar";
  244.         }
  245.         if ((event.clientX < marginLeft) && (marginLeft > 5)) {
  246.           if (event.target.id == targetIDLeft) {
  247.             if (mainWindow.hasAttribute("btURLLeft")) {
  248.               if (event.type == "click") {
  249.                 var subject = {};
  250.                 subject.wrappedJSObject = brandObject;
  251.                 observerService.notifyObservers(subject, "brandthunder", "bt-logo");
  252.                 brandObject.utilities.openLink(brandObject, event, mainWindow.getAttribute("btURLLeft"));
  253.               } else if (event.type == "mousemove") {
  254.                 event.target.style.cursor = "pointer";
  255.               }
  256.             }
  257.           }
  258.         } else if ((marginRight > 5) && (event.clientX > (window.innerWidth - marginRight))) {
  259.           if ((event.target.id == targetIDRight) || (event.target.id == "toolbar-menubar")) {
  260.             if (brandObject.adURL) {
  261.               if (event.type == "click") {
  262.                 var adURL;
  263.                 if (typeof(brandObject.adURL) == "object") {
  264.                   adURL = brandObject.adURL[currentBoom];
  265.                 } else {
  266.                   adURL = brandObject.adURL;
  267.                 }
  268.                 var subject = {};
  269.                 subject.wrappedJSObject = brandObject;
  270.                 observerService.notifyObservers(subject, "brandthunder", "bt-ad-right");
  271.                 brandObject.utilities.openLink(brandObject, event, adURL);
  272.               } else if (event.type == "mousemove") {
  273.                 event.target.style.cursor = "pointer";
  274.               }
  275.             }
  276.           }
  277.         } else if (event.type == "mousemove") {
  278.           event.target.style.cursor = "";
  279.         }
  280.       }
  281.     }
  282.     
  283.     function navBarMouseOut(event) {
  284.       event.target.style.cursor = "";
  285.     }
  286.  
  287.     
  288.     function firstRun() {
  289.       brandObject.utilities.firstRun(brandObject);
  290.   
  291.       function btEvent(event) {
  292.         if (event.target.ownerDocument.location.href.match(brandObject.welcomePage)) {
  293.           /* Handle search here */
  294.           if (event.target.hasAttribute("bt-search")) {
  295.             if (event.target.getAttribute("bt-search") == "true") {
  296.               brandObject.utilities.setDefaultSearchEngine(brandObject, true);
  297.             } else if (event.target.getAttribute("bt-search") == "false") {
  298.               /* Undo our prefs here */
  299.               /* This handles an explicit opt OUT with one of other booms installed */
  300.               /* We don't mess with search engines because they don't have one */
  301.               /* of ours set or they wouldn't have seen the dialog at all */
  302.               btPrefBranch.setBoolPref("keywordSearch", false);
  303.               btPrefBranch.setBoolPref("tabSearch", false);
  304.             }
  305.           }
  306.           if (brandObject.firstrun) {
  307.             brandObject.firstrun(event, brandObject);
  308.           }
  309.         }
  310.       }
  311.       window.addEventListener("BrandThunderEvent", btEvent, false, true);
  312.  
  313.       try {
  314.         btPrefBranch.addObserver("", prefObserver, false);
  315.       } catch (ex) {
  316.       }
  317.       try {
  318.         searchPrefBranch.addObserver("", prefObserver, false);
  319.       } catch (ex) {
  320.       }
  321.  
  322.       var osString = Components.classes["@mozilla.org/xre/app-info;1"]
  323.                               .getService(Components.interfaces.nsIXULRuntime).OS;
  324.  
  325.       var mainWindow = document.getElementById("main-window");
  326.  
  327.       mainWindow.setAttribute("btPlatform", osString);
  328.  
  329.  
  330.       brandObject.utilities.toggleTheme(brandObject);
  331.       brandObject.utilities.switchBoom(brandObject, false);
  332.  
  333.       window.removeEventListener("load", firstRun, true);
  334.       gBrowser.addEventListener("TabOpen", tabOpen, false);
  335.       document.getElementById("navigator-toolbox").addEventListener("click", navBarEvent, false);
  336.       document.getElementById("navigator-toolbox").addEventListener("mousemove", navBarEvent, false);
  337.       document.getElementById("navigator-toolbox").addEventListener("mouseout", navBarMouseOut, false);
  338.       observerService.addObserver(btObserver, "lightweight-theme-changed", false);
  339.  
  340.       var currentBoom = btPrefBranch.getCharPref("currentBoom");
  341.       if (brandObject.booms[currentBoom]) {
  342.         var btClientPrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
  343.                                            .getService(Components.interfaces.nsIPrefService)
  344.                                            .getBranch("extensions.brandthunder." + brandObject.shortName + ".");
  345.         var lastsent = 0;
  346.         try {
  347.           lastsent = btClientPrefBranch.getIntPref("btMetricsLite.lastsent");
  348.         } catch (ex) {}
  349.  
  350.         var currentdate = new Date();
  351.         var currenttimestamp = currentdate.getTime() / 1000;
  352.         
  353.         if (lastsent > 0) {
  354.           if ((currenttimestamp - lastsent) < 3600) {
  355.             var env = Cc['@mozilla.org/process/environment;1'].getService(Ci.nsIEnvironment);
  356.             if (!env.get('BRANDTHUNDER')) {
  357.               return;
  358.             }
  359.           }
  360.         }
  361.  
  362.         btClientPrefBranch.setIntPref("btMetricsLite.lastsent", currenttimestamp);
  363.  
  364.         var subject = {};
  365.         subject.wrappedJSObject = brandObject;
  366.         try {
  367.           var prefbranch=Components.classes["@mozilla.org/preferences-service;1"]
  368.                                    .getService(Components.interfaces.nsIPrefBranch);
  369.           prefbranch.clearUserPref("extensions.btMetricsLite.lastsent");          
  370.         } catch (ex) {}
  371.  
  372.         observerService.notifyObservers(subject, "brandthunder", "active");
  373.       }
  374.  
  375.     }
  376.     function lastRun(event) {
  377.       btPrefBranch.removeObserver("", prefObserver);
  378.       searchPrefBranch.removeObserver("", prefObserver);
  379.       gBrowser.removeEventListener("TabOpen", tabOpen, false);
  380.       document.getElementById("navigator-toolbox").removeEventListener("click", navBarEvent, false);
  381.       document.getElementById("navigator-toolbox").removeEventListener("mousemove", navBarEvent, false);
  382.       document.getElementById("navigator-toolbox").removeEventListener("mouseout", navBarMouseOut, false);
  383.       observerService.removeObserver(btObserver, "lightweight-theme-changed", false);
  384.       window.removeEventListener("unload", lastRun, false);
  385.     }
  386.     window.addEventListener("load", firstRun, false);
  387.     window.addEventListener("unload", lastRun, false);
  388.   })(BrandThunder.clients["&btClient;"]);
  389.   </script>
  390. <stringbundleset id="stringbundleset">
  391.     <stringbundle id="btClientBundle_&btClient;" 
  392.         src="chrome://&btClient;boom/locale/btClient.properties"/>
  393. </stringbundleset>
  394. </overlay>
  395.